Overview
Repositories
Repositories stores data during the library's operation and for setting the business logic of certain modules.
Interfaces for implementing repositories are located in the directory com.devexperts.dxcharts.lib.data.repo
.
If you need to change logic of our default implementations of repositories, e.g. change default values, you need to create your own implementation of according repositories and pass them into DxChartsConfig.Repositories
Repository name | Interface path | Default implementation path | Description |
---|---|---|---|
Aggregations Repository | com.devexperts.dxcharts.lib.data.repo.AgregationsRepository | com.devexperts.dxcharts.lib.data.repo.default_repos.LocalStorageDefaultAggregationsRepository | Repository for storing information about created and selected aggregations |
Colors Repository | com.devexperts.dxcharts.lib.data.repo.ColorsRepository | com.devexperts.dxcharts.lib.data.repo.default_repos.LocalStorageDefaultColorsRepository | Repository for storing color palette for indicators, settings, and drawings (except for the Highlighter type of drawings) |
Highlighter Colors Repository | com.devexperts.dxcharts.lib.data.repo.ColorsRepository | com.devexperts.dxcharts.lib.data.repo.default_repos.LocalStorageDefaultHighlighterColorsRepository | Repository for storing color palette for the Highlighter drawing |
Drawings Repository | com.devexperts.dxcharts.lib.data.repo.DrawingsRepository | com.devexperts.dxcharts.lib.data.repo.default_repos.LocalStorageDefaultDrawingsRepository | Repository for storing drawings system data: Contains 4 child interfaces that handle data about: 1) IInitial press of "Magnet" and "Brush" buttons on the drawing toolbar - a hint should be shown on the first press, and it also stores whether the hint was shown after setting a text drawing. 2) Selected line thickness for drawings. 3) Selected drawings from the general list displayed in the corresponding toolbar. 4) Snapshots of drawings created on the chart. |
Instrument Repository | com.devexperts.dxcharts.lib.data.repo.InstrumentRepository | com.devexperts.dxcharts.lib.data.repo.default_repos.LocalStorageDefaultInstrumentRepository | Repository to store data about the selected instrument on the chart |
Settings Repository | com.devexperts.dxcharts.lib.data.repo.SettingsRepository | com.devexperts.dxcharts.lib.data.repo.default_repos.LocalStorageDefaultSettingsRepository | Repository for storing chart settings data |
Studies Repository | com.devexperts.dxcharts.lib.data.repo.StudiesRepository | com.devexperts.dxcharts.lib.data.repo.default_repos.LocalStorageDefaultStudiesRepository | Repository to store indicators settings data |
Studies Templates Repository | com.devexperts.dxcharts.lib.data.repo.StudiesTemplatesRepository | com.devexperts.dxcharts.lib.data.repo.default_repos.LocalStorageDefaultStudiesTemplatesRepository | Repository to store data about user-created templates of indicators. |
Timeframe Presets Repository | com.devexperts.dxcharts.lib.data.repo.TimeframeTemplatesRepository | com.devexperts.dxcharts.lib.data.repo.default_repos.LocalStorageDefaultTimeframePresetsRepository | Repository to store data about timeframe presets. |
By default, data is not stored on the device - all data is cleared upon application reload. To prevent this from happening, the library user needs to implement the necessary repositories or you can use library implementation of repositories from serializable_storage_repos
package. They have methods serialize()
and deserialize(data: String)
to save and load data from your app. serialize()
method is called everytime when repository have some changes in its state and it save its state into shared preferences. According to that you also need to pass context
as a parameter into serializable storage.
All you need is to create objects of the necessary repositories and pass them to the library using the DxChartsConfig
and use deserialize(data: String)
method:
private val studiesRepository by lazy {SerializableStorageDefaultStudiesRepository(application, StudiesLoader().load(assets))}private val aggregationsRepository by lazy {SerializableStorageDefaultAggregationsRepository(application)}private val colorsRepository by lazy {SerializableStorageDefaultColorsRepository(application)}private val drawingsLineWidthRepo by lazy {SerializableStorageDefaultDrawingsLineWidthRepo(application)}private val drawingsSnapshotsRepo by lazy {SerializableStorageDefaultDrawingsSnapshotsRepo(application)}private val drawingsFirstClickRepo by lazy {SerializableStorageDefaultFirstClickRepo(application)}private val drawingsTypesRepo by lazy {SerializableStorageDefaultDrawingsTypesRepo(application)}private val highlighterColorsRepository by lazy {SerializableStorageDefaultHighlighterColorsRepository(application)}private val instrumentRepository by lazy {SerializableStorageDefaultInstrumentRepository(application)}private val timeframePresetsRepository by lazy {SerializableStorageDefaultTimeframePresetsRepository(application)}private val settingsRepository by lazy {SerializableStorageDefaultSettingsRepository(application)}private val studiesTemplatesRepository by lazy {SerializableStorageDefaultStudiesTemplatesRepository(application)}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)deserializeRepositories()//...setContent {DxChartsTheme {Surface(modifier = Modifier.fillMaxSize(),color = DxChartsTheme.colors.mainChartBg) {DxChartsScreen(DxChartsConfig(repositories = DxChartsConfig.Repositories(studiesRepository = studiesRepository,aggregationsRepository = aggregationsRepository,colorsRepository = colorsRepository,drawingsLineWidthRepo = drawingsLineWidthRepo,drawingsSnapshotsRepo = drawingsSnapshotsRepo,drawingsFirstClickRepo = drawingsFirstClickRepo,drawingsTypesRepo = drawingsTypesRepo,highlighterColorsRepository = highlighterColorsRepository,instrumentRepository = instrumentRepository,timeframePresetsRepository = timeframePresetsRepository,settingsRepository = settingsRepository,studiesTemplatesRepository = studiesTemplatesRepository),//...}}}}private fun deserializeRepositories() {val prefs = application.getSharedPreferences("dxcharts_demo_app", MODE_PRIVATE)val aggregations = prefs.getString("aggregations_repo", null)val colors = prefs.getString("colors_repo", null)val drawingsLine = prefs.getString("drawings_line_repo", null)val drawingsSnapshots = prefs.getString("drawings_snapshots_repo", null)val drawingsTypes = prefs.getString("drawings_types_repo", null)val drawingsFirstClick = prefs.getString("drawings_first_click_repo", null)val highlighter = prefs.getString("highlighter_repo", null)val instrument = prefs.getString("instrument_repo", null)val settings = prefs.getString("settings_repo", null)val studies = prefs.getString("studies_repo", null)val studiesTemplates = prefs.getString("studies_templates_repo", null)val timeframePresets = prefs.getString("timeframe_presets_repo", null)aggregations?.let { aggregationsRepository.deserialize(it) }colors?.let { colorsRepository.deserialize(it) }drawingsLine?.let { drawingsLineWidthRepo.deserialize(it) }drawingsSnapshots?.let { drawingsSnapshotsRepo.deserialize(it) }drawingsTypes?.let { drawingsTypesRepo.deserialize(it) }drawingsFirstClick?.let { drawingsFirstClickRepo.deserialize(it) }highlighter?.let { highlighterColorsRepository.deserialize(it) }instrument?.let { instrumentRepository.deserialize(it) }settings?.let { settingsRepository.deserialize(it) }studies?.let { studiesRepository?.deserialize(it) }studiesTemplates?.let { studiesTemplatesRepository.deserialize(it) }timeframePresets?.let { timeframePresetsRepository.deserialize(it) }}